import api from './index';
import { usersMockData, getUseMockData, systemSettingsMockData } from './mockData.fixed';
import Logger from '../utils/logger';

// 用户登录 - 直接使用后端API，不使用模拟数据
export const login = async (data) => {
  try {
    // 简化登录请求，避免复杂的配置
    const loginData = {
      username: data.username,
      password: data.password
    };
    
    // 直接使用默认配置
    return await api.post('/auth/login', loginData);
  } catch (error) {
    Logger.error('登录失败', { error: error.message });
    return Promise.reject(error);
  }
};

// 获取用户信息
export const getUserInfo = async (userId) => {
  // 检查是否使用数据
  if (getUseMockData()) {
    Logger.backupData('获取用户信息', { userId });
    
    // 如果是 admin 或者指定的用户ID，返回相应的数据
    const user = usersMockData[userId] || usersMockData.admin;
    
    if (!user) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    return {
      data: { ...user }
    };
  }
  
  try {
    return await api.get(`/users/${userId}`);
  } catch (error) {
    Logger.warn('获取用户信息失败，使用备用数据替代', { error: error.message });
    
    // 如果API失败，也尝试使用备用数据
    const user = usersMockData[userId] || usersMockData.admin;
    
    if (!user) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    return {
      data: { ...user }
    };
  }
};

// 更新用户信息
export const updateUserInfo = async (userId, data) => {
  // 检查是否使用模拟数据
  if (getUseMockData()) {
    
    // 查找用户
    if (!usersMockData[userId]) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    // 更新用户数据
    Object.assign(usersMockData[userId], data);
    
    return {
      data: { success: true }
    };
  }
  
  try {
    return await api.patch(`/users/${userId}`, data);
  } catch (error) {
    console.error('更新用户信息失败，使用备用数据替代:', error);
    
    // 如果API失败，也尝试使用备用数据
    if (!usersMockData[userId]) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    // 更新用户数据
    Object.assign(usersMockData[userId], data);
    
    return {
      data: { success: true }
    };
  }
};

// 修改密码
export const changePassword = async (userId, passwordData) => {
  // 检查是否使用模拟数据
  if (getUseMockData()) {
    
    // 查找用户
    if (!usersMockData[userId]) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    // 模拟密码修改成功
    return {
      data: { success: true }
    };
  }
  
  try {
    return await api.patch(`/users/${userId}`, { password: passwordData.newPassword });
  } catch (error) {
    console.error('修改密码失败，使用备用数据替代:', error);
    
    // 如果API失败，也尝试使用备用数据
    if (!usersMockData[userId]) {
      return Promise.reject({ message: '用户不存在' });
    }
    
    // 模拟密码修改成功
    return {
      data: { success: true }
    };
  }
};

// 获取所有用户列表
export const getUserList = async () => {
  // 检查是否使用模拟数据
  if (getUseMockData()) {
    
    // 转换对象为数组
    const userList = Object.values(usersMockData);
    
    return {
      data: userList
    };
  }
  
  try {
    return await api.get('/users');
  } catch (error) {
    console.error('获取用户列表失败，使用备用数据替代:', error);
    
    // 如果API失败，也尝试使用备用数据
    const userList = Object.values(usersMockData);
    
    return {
      data: userList
    };
  }
};

// 获取系统设置
export const getSystemSettings = async (userId) => {
  // 检查是否使用模拟数据
  if (getUseMockData()) {
    
    // 首先从localStorage获取用户自定义的系统设置
    const userSettings = localStorage.getItem('systemSettings');
    if (userSettings) {
      try {
        const parsedSettings = JSON.parse(userSettings);
        return {
          data: parsedSettings
        };
      } catch (error) {
        console.error('解析系统设置失败:', error);
      }
    }
    
    // 如果没有用户自定义的系统设置，返回默认设置
    return {
      data: { ...systemSettingsMockData }
    };
  }
  
  try {
    return await api.get(`/users/${userId}/settings`);
  } catch (error) {
    console.error('获取系统设置失败，使用备用数据替代:', error);
    
    // 首先从localStorage获取用户自定义的系统设置
    const userSettings = localStorage.getItem('systemSettings');
    if (userSettings) {
      try {
        const parsedSettings = JSON.parse(userSettings);
        return {
          data: parsedSettings
        };
      } catch (error) {
        console.error('解析系统设置失败:', error);
      }
    }
    
    // 如果没有用户自定义的系统设置，返回默认设置
    return {
      data: { ...systemSettingsMockData }
    };
  }
};

// 更新系统设置
export const updateSystemSettings = async (userId, settings) => {
  // 检查是否使用模拟数据
  if (getUseMockData()) {
    
    // 保存到localStorage
    localStorage.setItem('systemSettings', JSON.stringify(settings));
    
    return {
      data: { success: true }
    };
  }
  
  try {
    return await api.patch(`/users/${userId}/settings`, settings);
  } catch (error) {
    console.error('更新系统设置失败，使用备用数据替代:', error);
    
    // 保存到localStorage
    localStorage.setItem('systemSettings', JSON.stringify(settings));
    
    return {
      data: { success: true }
    };
  }
};